package practice1_100;

import java.util.HashSet;
import java.util.Set;

public class Practice80 {
    //笨方法，先找数组中超过两个相同数的下标，存入set，最后在遍历一次，不在set中的都做移动
    public int removeDuplicates(int[] nums) {
        int len= nums.length;
        if(len<=2) return 2;
        Set<Integer> set=new HashSet<>();
        int temp=nums[0];
        int count=1;
        for (int i = 1; i < nums.length ; i++) {
            if(temp==nums[i]){
                if(count>=2){
                    set.add(i);
                    len--;
                }
                count++;
            }else {
                temp=nums[i];
                count=1;
            }
        }

        for (int i = 0,j=0; i < nums.length; i++) {
            if(!set.contains(i)){
                nums[j]=nums[i];
                j++;
            }
        }
        return len;
    }

    //较好的方法就是通过快慢指针，慢指针做保留存储，快指针做遍历
//    public int removeDuplicates1(int[] nums) {
//        int fast=1,slow=0;
//        int count=1;
//        for (int i = 0; i < nums.length ; i++) {
//            if(nums[fast]==nums[slow]){
//                if(count<2){ fast++;slow++;}
//                else {fast++;}
//                count++;
//            }else {
//
//            }
//        }
//    }
}
